package Vue;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.BorderFactory;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.colorchooser.DefaultColorSelectionModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import Controleur.Controleur;

/**
 * Cette class permet de créer et gérer la barre état du bas de la fenêtre principal de l'application.
 * 
 * @author Kilian Cousein et Benjamin Tardieu
 */
public class BarreEtatBas extends JPanel implements MouseListener
{
//======================================================================//
//============================ Variables ===============================//
//======================================================================//

	private Controleur controleur;
	
	private JLabel libelleCoordonneX = new JLabel("X: ");
    private JLabel libelleCoordonneY = new JLabel("Y: ");
    private JLabel labelCoordonneX = new JLabel("0");
    private JLabel labelCoordonneY = new JLabel("0");
    
    private JLabel libelleCouleurRemplissage = new JLabel("Remplissage: ");
    private JLabel libelleCouleurBordure = new JLabel("Bordure: ");  
    private JLabel labelCouleurRemplissage = new JLabel("       ");
    private JLabel labelCouleurContour = new JLabel("       ");
    
    
//======================================================================//
//========================== Constructeurs =============================//
//======================================================================//
    
    /**
     * Crée une nouvelle instance de <i>BarreEtatBas</i>.
     *
     * @param controleur
     */
    public BarreEtatBas(Controleur controleur)
    {    	
    	this.controleur = controleur;
    	this.setLayout(new BorderLayout());
    	
    	JPanel panCoordonne = new JPanel(new BorderLayout());
    	JPanel panCoordonneX = new JPanel(new BorderLayout());
    	JPanel panCoordonneY = new JPanel(new BorderLayout()); 
    	
    	JPanel panCouleur = new JPanel(new BorderLayout());
    	JPanel panCouleurRemplissage = new JPanel(new BorderLayout());
    	JPanel panCouleurContour = new JPanel(new BorderLayout()); 
    	
    	
    	panCoordonneX.add(this.libelleCoordonneX, BorderLayout.WEST);
    	panCoordonneX.add(this.labelCoordonneX, BorderLayout.EAST);
    	panCoordonneX.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 30));  
    	panCoordonne.add(panCoordonneX, BorderLayout.NORTH);
    	
    	panCoordonneY.add(this.libelleCoordonneY, BorderLayout.WEST);
    	panCoordonneY.add(this.labelCoordonneY, BorderLayout.EAST);
    	panCoordonneY.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 30));  
    	panCoordonne.add(panCoordonneY, BorderLayout.SOUTH);    
    	
    	
    	this.labelCouleurRemplissage.setName("couleurRemplissage");
    	this.labelCouleurRemplissage.setOpaque(true);
    	this.labelCouleurRemplissage.setBackground(Color.blue);
    	panCouleurRemplissage.add(this.libelleCouleurRemplissage, BorderLayout.WEST);
    	panCouleurRemplissage.add(this.labelCouleurRemplissage, BorderLayout.EAST);
    	panCouleurRemplissage.setBorder(BorderFactory.createEmptyBorder(2, 10, 2, 2));
    	panCouleur.add(panCouleurRemplissage, BorderLayout.NORTH);
    	
    	this.labelCouleurContour.setName("couleurContour");
    	this.labelCouleurContour.setOpaque(true);
    	this.labelCouleurContour.setBackground(Color.black);
    	panCouleurContour.add(this.libelleCouleurBordure, BorderLayout.WEST);
    	panCouleurContour.add(this.labelCouleurContour, BorderLayout.EAST);
    	panCouleurContour.setBorder(BorderFactory.createEmptyBorder(2, 10, 2, 2));  
    	panCouleur.add(panCouleurContour, BorderLayout.SOUTH);  	
    	  
   
    	this.add(panCoordonne, BorderLayout.EAST);
    	this.add(panCouleur, BorderLayout.WEST);
    	
    	this.labelCouleurRemplissage.addMouseListener(this);
    	this.labelCouleurContour.addMouseListener(this);
    }

    
//======================================================================//
//============================= Méthodes ===============================//
//======================================================================//
    
    /**
     * Cette méthode permet d'afficher la position de la souris dans la barre état du bas de la fenêtre.
     * 
     *  @param x Position x de la souris.
     *  @param y Position y de la souris.
     */
	public void afficherPositionSouris(int x, int y) 
	{
		this.labelCoordonneX.setText(Integer.toString(x));
		this.labelCoordonneY.setText(Integer.toString(y));
	}
	
	
	/**
	 * Cette méthode permet de modifier la couleur de remplissage d'un motif qui sera affiché dans la fenêtre.
	 *  
	 * @param couleur Nouvelle couleur à afficher.
	 */
	public void modifierValeurMenuCouleurRemplissage(Color couleur)
	{
		this.labelCouleurRemplissage.setBackground(couleur);
	}

	
	/**
	 * Cette méthode permet de modifier la couleur de la bordure du motif qui sera affiché dans la fenêtre.
	 * 
	 * @param couleur Nouvelle couleur de la bordure à afficher.
	 */
	public void modifierValeurMenuCouleurBordure(Color couleur)
	{
		this.labelCouleurContour.setBackground(couleur);
	}
	
	
	@Override
	public void mouseClicked(MouseEvent e)
	{
		JLabel label = (JLabel) e.getSource();

		JFrame f = new JFrame();
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
		f.setVisible(true);

		JColorChooser boiteCouleur = new JColorChooser();

		if(label.getName() == "couleurRemplissage")
		{
			boiteCouleur.getSelectionModel().addChangeListener(new ChangeListener()
			{
				public void stateChanged(ChangeEvent e) 
				{
					Color couleur = ((DefaultColorSelectionModel)e.getSource()).getSelectedColor();

					controleur.changerCouleurMotif(couleur);
				}
			});
		}
		else if(label.getName() == "couleurContour")
		{
			boiteCouleur.getSelectionModel().addChangeListener(new ChangeListener()
			{
				public void stateChanged(ChangeEvent e) 
				{
					Color couleur = ((DefaultColorSelectionModel)e.getSource()).getSelectedColor();

					controleur.changerCouleurBordure(couleur);
				}
			});
		}

		f.add(boiteCouleur);
		f.pack();
	}
	
	@Override
	public void mouseEntered(MouseEvent e)
	{
	}

	@Override
	public void mouseExited(MouseEvent e)
	{
	}

	@Override
	public void mousePressed(MouseEvent e)
	{
	}

	@Override
	public void mouseReleased(MouseEvent e)
	{
	}
}